package com.njts.Polymorphism;

/**
 * @author David GE
 * Date  2025/11/20
 * 定义银行卡：主卡和副卡类，完成下列功能
 * 1、完成银行卡-主卡的存取款方法
 *   主卡卡有余额，卡号，户主等属性
 *   有存款和取款的方法（取款时候余额不足要有提示）
 * 2、完成银行卡-副卡的取款方法
 *   副卡额外有透支额度属性(副卡可用主卡中余额，且余额不够，可以透支额度)
 *   副卡重写取款方法（取款时候余额不足要有提示）
 * 3、写测试案例，分别测试主卡和副卡的存取款功能（存取款后显示余额）
 */
public class TestCardPolymorphism {
    // 多态 : 一个对象多种形态

    public static void main(String[] args) {
        // 多态
        //前提:父类引用和子类实例对象之间存在继承(实现)关系
        // 基本形式:父类引用指向子类对象 多态定义
        CreditCard viceCard = new ViceCreditCard();
        // 机理:在编译时会看左边的类型声明,编译时检查=右边的实例对象是不是左边类型的子类对象实例
        // 运行时,会看右边,调用子类的方法,因为本质上新建的还是子类对象
        // 通过instanceof 关键字判断
        Card card = new Card();
        if (viceCard instanceof ViceCreditCard){
            System.out.println("viceCard是信用卡");
        }

        viceCard.setBalance(300);
        viceCard.withdraw(500);

        

    }
}
